home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / net / HttpCookie.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  7.7 KB  |  423 lines

  1. package java.net;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.ArrayList;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.NoSuchElementException;
  10. import java.util.StringTokenizer;
  11. import java.util.TimeZone;
  12.  
  13. public final class HttpCookie implements Cloneable {
  14.    private String name;
  15.    private String value;
  16.    private String comment;
  17.    private String commentURL;
  18.    private boolean toDiscard;
  19.    private String domain;
  20.    private long maxAge = -1L;
  21.    private String path;
  22.    private String portlist;
  23.    private boolean secure;
  24.    private int version = 1;
  25.    private long whenCreated = 0L;
  26.    private static final long MAX_AGE_UNSPECIFIED = -1L;
  27.    private static final String NETSCAPE_COOKIE_DATE_FORMAT = "EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'";
  28.    private static final String SET_COOKIE = "set-cookie:";
  29.    private static final String SET_COOKIE2 = "set-cookie2:";
  30.    private static final String tspecials = ",;";
  31.    static Map<String, CookieAttributeAssignor> assignors = null;
  32.  
  33.    public HttpCookie(String var1, String var2) {
  34.       var1 = var1.trim();
  35.       if (var1.length() != 0 && isToken(var1) && !isReserved(var1)) {
  36.          this.name = var1;
  37.          this.value = var2;
  38.          this.toDiscard = false;
  39.          this.secure = false;
  40.          this.whenCreated = System.currentTimeMillis();
  41.       } else {
  42.          throw new IllegalArgumentException("Illegal cookie name");
  43.       }
  44.    }
  45.  
  46.    public static List<HttpCookie> parse(String var0) {
  47.       int var1 = guessCookieVersion(var0);
  48.       if (startsWithIgnoreCase(var0, "set-cookie2:")) {
  49.          var0 = var0.substring("set-cookie2:".length());
  50.       } else if (startsWithIgnoreCase(var0, "set-cookie:")) {
  51.          var0 = var0.substring("set-cookie:".length());
  52.       }
  53.  
  54.       ArrayList var2 = new ArrayList();
  55.       if (var1 == 0) {
  56.          HttpCookie var3 = parseInternal(var0);
  57.          var3.setVersion(0);
  58.          var2.add(var3);
  59.       } else {
  60.          for(String var5 : splitMultiCookies(var0)) {
  61.             HttpCookie var6 = parseInternal(var5);
  62.             var6.setVersion(1);
  63.             var2.add(var6);
  64.          }
  65.       }
  66.  
  67.       return var2;
  68.    }
  69.  
  70.    public boolean hasExpired() {
  71.       if (this.maxAge == 0L) {
  72.          return true;
  73.       } else if (this.maxAge == -1L) {
  74.          return false;
  75.       } else {
  76.          long var1 = (System.currentTimeMillis() - this.whenCreated) / 1000L;
  77.          return var1 > this.maxAge;
  78.       }
  79.    }
  80.  
  81.    public void setComment(String var1) {
  82.       this.comment = var1;
  83.    }
  84.  
  85.    public String getComment() {
  86.       return this.comment;
  87.    }
  88.  
  89.    public void setCommentURL(String var1) {
  90.       this.commentURL = var1;
  91.    }
  92.  
  93.    public String getCommentURL() {
  94.       return this.commentURL;
  95.    }
  96.  
  97.    public void setDiscard(boolean var1) {
  98.       this.toDiscard = var1;
  99.    }
  100.  
  101.    public boolean getDiscard() {
  102.       return this.toDiscard;
  103.    }
  104.  
  105.    public void setPortlist(String var1) {
  106.       this.portlist = var1;
  107.    }
  108.  
  109.    public String getPortlist() {
  110.       return this.portlist;
  111.    }
  112.  
  113.    public void setDomain(String var1) {
  114.       if (var1 != null) {
  115.          this.domain = var1.toLowerCase();
  116.       } else {
  117.          this.domain = var1;
  118.       }
  119.  
  120.    }
  121.  
  122.    public String getDomain() {
  123.       return this.domain;
  124.    }
  125.  
  126.    public void setMaxAge(long var1) {
  127.       this.maxAge = var1;
  128.    }
  129.  
  130.    public long getMaxAge() {
  131.       return this.maxAge;
  132.    }
  133.  
  134.    public void setPath(String var1) {
  135.       this.path = var1;
  136.    }
  137.  
  138.    public String getPath() {
  139.       return this.path;
  140.    }
  141.  
  142.    public void setSecure(boolean var1) {
  143.       this.secure = var1;
  144.    }
  145.  
  146.    public boolean getSecure() {
  147.       return this.secure;
  148.    }
  149.  
  150.    public String getName() {
  151.       return this.name;
  152.    }
  153.  
  154.    public void setValue(String var1) {
  155.       this.value = var1;
  156.    }
  157.  
  158.    public String getValue() {
  159.       return this.value;
  160.    }
  161.  
  162.    public int getVersion() {
  163.       return this.version;
  164.    }
  165.  
  166.    public void setVersion(int var1) {
  167.       if (var1 != 0 && var1 != 1) {
  168.          throw new IllegalArgumentException("cookie version should be 0 or 1");
  169.       } else {
  170.          this.version = var1;
  171.       }
  172.    }
  173.  
  174.    public static boolean domainMatches(String var0, String var1) {
  175.       if (var0 != null && var1 != null) {
  176.          boolean var2 = ".local".equalsIgnoreCase(var0);
  177.          int var3 = var0.indexOf(46);
  178.          if (var3 == 0) {
  179.             var3 = var0.indexOf(46, 1);
  180.          }
  181.  
  182.          if (var2 || var3 != -1 && var3 != var0.length() - 1) {
  183.             int var4 = var1.indexOf(46);
  184.             if (var4 == -1 && var2) {
  185.                return true;
  186.             } else {
  187.                int var5 = var0.length();
  188.                int var6 = var1.length() - var5;
  189.                if (var6 == 0) {
  190.                   return var1.equalsIgnoreCase(var0);
  191.                } else if (var6 > 0) {
  192.                   String var7 = var1.substring(0, var6);
  193.                   String var8 = var1.substring(var6);
  194.                   return var7.indexOf(46) == -1 && var8.equalsIgnoreCase(var0);
  195.                } else if (var6 != -1) {
  196.                   return false;
  197.                } else {
  198.                   return var0.charAt(0) == '.' && var1.equalsIgnoreCase(var0.substring(1));
  199.                }
  200.             }
  201.          } else {
  202.             return false;
  203.          }
  204.       } else {
  205.          return false;
  206.       }
  207.    }
  208.  
  209.    public String toString() {
  210.       return this.getVersion() > 0 ? this.toRFC2965HeaderString() : this.toNetscapeHeaderString();
  211.    }
  212.  
  213.    public boolean equals(Object var1) {
  214.       if (var1 == this) {
  215.          return true;
  216.       } else if (!(var1 instanceof HttpCookie)) {
  217.          return false;
  218.       } else {
  219.          HttpCookie var2 = (HttpCookie)var1;
  220.          return equalsIgnoreCase(this.getName(), var2.getName()) && equalsIgnoreCase(this.getDomain(), var2.getDomain()) && equals(this.getPath(), var2.getPath());
  221.       }
  222.    }
  223.  
  224.    public int hashCode() {
  225.       int var1 = this.name.toLowerCase().hashCode();
  226.       int var2 = this.domain != null ? this.domain.toLowerCase().hashCode() : 0;
  227.       int var3 = this.path != null ? this.path.hashCode() : 0;
  228.       return var1 + var2 + var3;
  229.    }
  230.  
  231.    public Object clone() {
  232.       try {
  233.          return super.clone();
  234.       } catch (CloneNotSupportedException var2) {
  235.          throw new RuntimeException(var2.getMessage());
  236.       }
  237.    }
  238.  
  239.    private static boolean isToken(String var0) {
  240.       int var1 = var0.length();
  241.  
  242.       for(int var2 = 0; var2 < var1; ++var2) {
  243.          char var3 = var0.charAt(var2);
  244.          if (var3 < ' ' || var3 >= 127 || ",;".indexOf(var3) != -1) {
  245.             return false;
  246.          }
  247.       }
  248.  
  249.       return true;
  250.    }
  251.  
  252.    private static boolean isReserved(String var0) {
  253.       return var0.equalsIgnoreCase("Comment") || var0.equalsIgnoreCase("CommentURL") || var0.equalsIgnoreCase("Discard") || var0.equalsIgnoreCase("Domain") || var0.equalsIgnoreCase("Expires") || var0.equalsIgnoreCase("Max-Age") || var0.equalsIgnoreCase("Path") || var0.equalsIgnoreCase("Port") || var0.equalsIgnoreCase("Secure") || var0.equalsIgnoreCase("Version") || var0.charAt(0) == '$';
  254.    }
  255.  
  256.    private static HttpCookie parseInternal(String var0) {
  257.       HttpCookie var1 = null;
  258.       Object var2 = null;
  259.       StringTokenizer var3 = new StringTokenizer(var0, ";");
  260.  
  261.       try {
  262.          String var9 = var3.nextToken();
  263.          int var4 = var9.indexOf(61);
  264.          if (var4 == -1) {
  265.             throw new IllegalArgumentException("Invalid cookie name-value pair");
  266.          }
  267.  
  268.          String var5 = var9.substring(0, var4).trim();
  269.          String var6 = var9.substring(var4 + 1).trim();
  270.          var1 = new HttpCookie(var5, stripOffSurroundingQuote(var6));
  271.       } catch (NoSuchElementException var7) {
  272.          throw new IllegalArgumentException("Empty cookie header string");
  273.       }
  274.  
  275.       String var12;
  276.       String var13;
  277.       for(; var3.hasMoreTokens(); assignAttribute(var1, var12, var13)) {
  278.          String var10 = var3.nextToken();
  279.          int var11 = var10.indexOf(61);
  280.          if (var11 != -1) {
  281.             var12 = var10.substring(0, var11).trim();
  282.             var13 = var10.substring(var11 + 1).trim();
  283.          } else {
  284.             var12 = var10.trim();
  285.             var13 = null;
  286.          }
  287.       }
  288.  
  289.       return var1;
  290.    }
  291.  
  292.    private static void assignAttribute(HttpCookie var0, String var1, String var2) {
  293.       var2 = stripOffSurroundingQuote(var2);
  294.       CookieAttributeAssignor var3 = (CookieAttributeAssignor)assignors.get(var1.toLowerCase());
  295.       if (var3 != null) {
  296.          var3.assign(var0, var1, var2);
  297.       } else {
  298.          throw new IllegalArgumentException("Illegal cookie attribute");
  299.       }
  300.    }
  301.  
  302.    private String toNetscapeHeaderString() {
  303.       StringBuilder var1 = new StringBuilder();
  304.       var1.append(this.getName() + "=" + this.getValue());
  305.       return var1.toString();
  306.    }
  307.  
  308.    private String toRFC2965HeaderString() {
  309.       StringBuilder var1 = new StringBuilder();
  310.       var1.append(this.getName()).append("=\"").append(this.getValue()).append('"');
  311.       if (this.getPath() != null) {
  312.          var1.append(";$Path=\"").append(this.getPath()).append('"');
  313.       }
  314.  
  315.       if (this.getDomain() != null) {
  316.          var1.append(";$Domain=\"").append(this.getDomain()).append('"');
  317.       }
  318.  
  319.       if (this.getPortlist() != null) {
  320.          var1.append(";$Port=\"").append(this.getPortlist()).append('"');
  321.       }
  322.  
  323.       return var1.toString();
  324.    }
  325.  
  326.    private long expiryDate2DeltaSeconds(String var1) {
  327.       SimpleDateFormat var2 = new SimpleDateFormat("EEE',' dd-MMM-yyyy HH:mm:ss 'GMT'");
  328.       var2.setTimeZone(TimeZone.getTimeZone("GMT"));
  329.  
  330.       try {
  331.          Date var3 = var2.parse(var1);
  332.          return (var3.getTime() - this.whenCreated) / 1000L;
  333.       } catch (Exception var4) {
  334.          return 0L;
  335.       }
  336.    }
  337.  
  338.    private static int guessCookieVersion(String var0) {
  339.       byte var1 = 0;
  340.       var0 = var0.toLowerCase();
  341.       if (var0.indexOf("expires=") != -1) {
  342.          var1 = 0;
  343.       } else if (var0.indexOf("version=") != -1) {
  344.          var1 = 1;
  345.       } else if (var0.indexOf("max-age") != -1) {
  346.          var1 = 1;
  347.       } else if (startsWithIgnoreCase(var0, "set-cookie2:")) {
  348.          var1 = 1;
  349.       }
  350.  
  351.       return var1;
  352.    }
  353.  
  354.    private static String stripOffSurroundingQuote(String var0) {
  355.       return var0 != null && var0.length() > 0 && var0.charAt(0) == '"' && var0.charAt(var0.length() - 1) == '"' ? var0.substring(1, var0.length() - 1) : var0;
  356.    }
  357.  
  358.    private static boolean equalsIgnoreCase(String var0, String var1) {
  359.       if (var0 == var1) {
  360.          return true;
  361.       } else {
  362.          return var0 != null && var1 != null ? var0.equalsIgnoreCase(var1) : false;
  363.       }
  364.    }
  365.  
  366.    private static boolean equals(String var0, String var1) {
  367.       if (var0 == var1) {
  368.          return true;
  369.       } else {
  370.          return var0 != null && var1 != null ? var0.equals(var1) : false;
  371.       }
  372.    }
  373.  
  374.    private static boolean startsWithIgnoreCase(String var0, String var1) {
  375.       if (var0 != null && var1 != null) {
  376.          return var0.length() >= var1.length() && var1.equalsIgnoreCase(var0.substring(0, var1.length()));
  377.       } else {
  378.          return false;
  379.       }
  380.    }
  381.  
  382.    private static List<String> splitMultiCookies(String var0) {
  383.       ArrayList var1 = new ArrayList();
  384.       int var2 = 0;
  385.       int var3 = 0;
  386.  
  387.       int var4;
  388.       for(var4 = 0; var3 < var0.length(); ++var3) {
  389.          char var5 = var0.charAt(var3);
  390.          if (var5 == '"') {
  391.             ++var2;
  392.          }
  393.  
  394.          if (var5 == ',' && var2 % 2 == 0) {
  395.             var1.add(var0.substring(var4, var3));
  396.             var4 = var3 + 1;
  397.          }
  398.       }
  399.  
  400.       var1.add(var0.substring(var4));
  401.       return var1;
  402.    }
  403.  
  404.    // $FF: synthetic method
  405.    static long access$000(HttpCookie var0, String var1) {
  406.       return var0.expiryDate2DeltaSeconds(var1);
  407.    }
  408.  
  409.    static {
  410.       assignors = new HashMap();
  411.       assignors.put("comment", new 1());
  412.       assignors.put("commenturl", new 2());
  413.       assignors.put("discard", new 3());
  414.       assignors.put("domain", new 4());
  415.       assignors.put("max-age", new 5());
  416.       assignors.put("path", new 6());
  417.       assignors.put("port", new 7());
  418.       assignors.put("secure", new 8());
  419.       assignors.put("version", new 9());
  420.       assignors.put("expires", new 10());
  421.    }
  422. }
  423.